package com.lpf.init;

import com.lpf.config.AppConfig;
import org.springframework.web.WebApplicationInitializer;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.DispatcherServlet;

import javax.servlet.ServletContext;
import javax.servlet.ServletRegistration;

public class MyWebApplicationInitializer implements WebApplicationInitializer {

    // tomcat在初始化web容器的时候会调用onStartup()
    @Override
    public void onStartup(ServletContext servletContext) {

        // 单独使用 spring mvc 是不会处理静态资源的
        // springboot是会处理的，对 spring mvc 进行了扩展
        // spring boot 底层重写了 handlerMappings，加入了一个新的处理器映射器，专门处理静态资源。如果检测到是一个静态资源的话就会开启一个文件流去读取静态资源，然后写入响应输出流中

        // servlet 3.0 以后推出的规范（SPI机制）
        // spring-web-5.1.8.RELEASE.jar!\META-INF\services\javax.servlet.ServletContainerInitializer

        // springboot 部署方式：
        // 1、war包方式：这里所讲的方式（SPI机制）
        // 2、jar包方式：SpringApplication.run()，底层加入了tomcat的核心依赖

        // 初始化Spring
        // spring mvc 环境初始化

        // 使用注解的形式开发(配置)Spring，零配置
        // Load Spring web application configuration
        AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
        context.register(AppConfig.class);

        // Create and register the DispatcherServlet
        DispatcherServlet servlet = new DispatcherServlet(context);
        ServletRegistration.Dynamic registration = servletContext.addServlet("app", servlet);
        registration.setLoadOnStartup(1);
        registration.addMapping("/app/*");
    }
}